/*
Date:20220127 20:42Pm
key:1.主要是开头和结尾可能有空格这一点坑了我
*/
class Solution {
public:
    char Sign[4]={'-','!','.',','};
    vector<string>Cut(string sentence,char c)
    {
        vector<string>str_V;
        string tmp="";
        for(int i=0;i<sentence.size();i++)
        {
            if(sentence[i]==c)
            {
                if(tmp!="")//避免连续 分割字符 情况
                {
                    str_V.push_back(tmp);
                }
            
            tmp="";continue;}
            else
            {
                tmp=tmp+sentence[i];
            }
        }
        str_V.push_back(tmp);
        return str_V;
    }
    bool abc(string s)
    {   
        return a(s)&&b(s)&&c(s);
    }
    bool legalSign(char c)
    {
        for(int i=0;i<4;i++)
        {
            if(c== Sign[i])
            {
                return true;
            }
        }
        return false;
    }
    bool legal(char c)
    {
        
        return ((legalSign(c))||(c>='a'&&c<='z'));
    }
    bool a(string s)
    {
        for(int i=0;i<s.size();i++)
        {
            if(legal(s[i])==false){return false;}
        }
        return true;
    }
        bool b(string s)
    {
        //统计连字符
        int signcount=0;
        int signpos;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='-')
            {
                signcount++;
                signpos=i;
            }
        }
        if(signcount>1){return false;}
        //如果存在，连字符两侧应当都存在小写字母（"a-b" 是一个有效单词，但 "-ab" 和 "ab-" 不是有效单词）。
        if(signcount==1)
        {
        if(signpos<1||signpos>s.size()-2){return false;}
        if(s[signpos-1]<'a'||s[signpos-1]>'z'){return false;}
        if(s[signpos+1]<'a'||s[signpos+1]>'z'){return false;}
        }

        return true;
    }
        bool c(string s)
    {
        //标点符号
        int signcount=0;
        int signpos;
        for(int i=0;i<s.size();i++)
        {
            if(s[i]=='!'||s[i]=='.'||s[i]==',')
            {
                signcount++;
                signpos=i;
            }
        }
        if(signcount>1){return false;}
        //如果存在，标点符号应当位于 token 的 末尾
        //cout<<signcount<<signpos<<s.size()-1<<endl;
        if(signcount==1&& signpos!=s.size()-1){return false;}
        //cout<<"yes";
        return true;
    }
    int countValidWords(string sentence) {
        vector<string>str_V;
        //先去除首位空格
        string new_sentence="";
        int start,end;
        for(int i=0;i<sentence.size();i++)
        {
            if(sentence[i]!=' '){start=i;break;}
        }
        for(int i=sentence.size()-1;i>-1;i--)
        {
            if(sentence[i]!=' '){end=i;break;}
        }
        for(int i=start;i<=end;i++)
        {
            new_sentence=new_sentence+sentence[i];
        }
        
        str_V=Cut(new_sentence,' ');
        int count=0;
        for(string tmp:str_V)
        {
            if(abc(tmp)){count++;}
        }
        
        return count;
    }
};